package com.srmt.document.exception;

/**
 * 文档操作基础异常类
 * 所有文档操作相关的异常都应该继承此类
 * 
 * @author YourCompany
 * @since 1.0.0
 */
public class DocumentOperationException extends Exception {
    
    private static final long serialVersionUID = 1L;
    
    /**
     * 错误码
     */
    private String errorCode;
    
    /**
     * 文档ID（如果有）
     */
    private String documentId;
    
    /**
     * 构造函数
     * 
     * @param message 错误消息
     */
    public DocumentOperationException(String message) {
        super(message);
    }
    
    /**
     * 构造函数
     * 
     * @param message 错误消息
     * @param cause 原始异常
     */
    public DocumentOperationException(String message, Throwable cause) {
        super(message, cause);
    }
    
    /**
     * 构造函数
     * 
     * @param errorCode 错误码
     * @param message 错误消息
     */
    public DocumentOperationException(String errorCode, String message) {
        super(message);
        this.errorCode = errorCode;
    }
    
    /**
     * 构造函数
     * 
     * @param errorCode 错误码
     * @param message 错误消息
     * @param cause 原始异常
     */
    public DocumentOperationException(String errorCode, String message, Throwable cause) {
        super(message, cause);
        this.errorCode = errorCode;
    }
    
    /**
     * 构造函数（带文档ID）
     * 
     * @param errorCode 错误码
     * @param message 错误消息
     * @param documentId 文档ID
     */
    public DocumentOperationException(String errorCode, String message, String documentId) {
        super(message);
        this.errorCode = errorCode;
        this.documentId = documentId;
    }
    
    /**
     * 构造函数（完整参数）
     * 
     * @param errorCode 错误码
     * @param message 错误消息
     * @param documentId 文档ID
     * @param cause 原始异常
     */
    public DocumentOperationException(String errorCode, String message, String documentId, Throwable cause) {
        super(message, cause);
        this.errorCode = errorCode;
        this.documentId = documentId;
    }
    
    public String getErrorCode() {
        return errorCode;
    }
    
    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }
    
    public String getDocumentId() {
        return documentId;
    }
    
    public void setDocumentId(String documentId) {
        this.documentId = documentId;
    }
    
    /**
     * 获取详细的错误信息
     * 
     * @return 详细错误信息
     */
    public String getDetailMessage() {
        StringBuilder sb = new StringBuilder();
        if (errorCode != null) {
            sb.append("[").append(errorCode).append("] ");
        }
        sb.append(getMessage());
        if (documentId != null) {
            sb.append(" (Document: ").append(documentId).append(")");
        }
        return sb.toString();
    }
    
    @Override
    public String toString() {
        return getClass().getSimpleName() + ": " + getDetailMessage();
    }
}